package com.steak.javase.reflect.method;

import com.steak.javase.reflect.User;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;

/**
 * @author 刘牌
 * @Title:
 * @date 2022-04-050:04
 */
public class MethodTest {
    public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException, InstantiationException {
        //获取所有方法(公有私有都获取)
//        Method[] declaredMethods = User.class.getDeclaredMethods();
//        for (Method declaredMethod : declaredMethods) {
//            System.out.println(declaredMethod.getName());
//        }

        //只获取公有方法
//        Method[] methods = User.class.getMethods();
//        for (Method method : methods) {
//            System.out.println(method.getName());
//        }

        //反射调用，
//        Method getUser = User.class.getMethod("getUser", String.class, String.class);
//        User user = User.class.newInstance();
//        Object invoke = getUser.invoke( user,"liu", "pai");
//        System.out.println(invoke);

        //通过set方法为字段赋值
//        User.class.getMethod("setName", String.class).invoke(user, "123");
//        System.out.println("name  "+user);

        //调用方法
//        Object getName = User.class.getMethod("getName").invoke(user);
//        System.out.println("getName "+getName);

        //获取构造方法
//        Constructor<User> constructor = User.class.getConstructor();
//        User user = constructor.newInstance();
//        System.out.println(user);

        Method getUser = User.class.getMethod("getUser", String.class, String.class);
        Parameter[] parameters = getUser.getParameters();
        for (Parameter parameter : parameters) {
            System.out.println(parameter);
        }
    }
}
